package com.msk.web.controller.system;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.msk.common.constant.Constants;
import com.msk.common.core.domain.R;
import com.msk.common.core.domain.model.LoginBody;
import com.msk.common.core.domain.model.LoginUser;
import com.msk.common.utils.StringUtils;
import com.msk.framework.web.service.SysMpLoginService;
import com.msk.framework.web.utils.TokenUtils;
import com.msk.wlhy.domain.HtDriverFile;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @Description 系统登录控制器
 * @Author zlf
 * @Date 2023/5/8 23:45
 */

@Api(tags = "接口登录管理")
@RestController
@RequestMapping("/api")
public class SysApiLoginController {

    @Autowired
    private SysMpLoginService loginService;

    /**
     * 登录方法
     *
     * @param loginBody 登录信息
     * @return 结果
     */
    @ApiOperation("系统用户登录")
    @PostMapping("/mp/login")
    public R<?> login(@RequestBody LoginBody loginBody) {
        //登录方式 1.账号密码，2.手机号验证码 3.微信一键登录
        String loginType = loginBody.getLoginType();
        R<?> result;
        if (StringUtils.isNotEmpty(loginType)) {
            if ("1".equalsIgnoreCase(loginType)) {
                //密码登录生成令牌
                result = loginService.passwordLogin(loginBody.getUsername(), loginBody.getPassword(), loginBody.getLoginObject());
            } else if ("2".equalsIgnoreCase(loginType)){
                //手机号验证码登录生成令牌
                result = loginService.phoneCodeMpLogin(loginBody.getUsername(),  loginBody.getCode(), loginBody.getLoginObject());
            } else if ("3".equalsIgnoreCase(loginType)) {
                //手机号一键登录生成令牌
                result = loginService.phoneMpLogin(loginBody.getUsername(), loginBody.getOpenId(), loginBody.getLoginObject());
            } else {
                return R.appFail(2000, "非法登录");
            }
        } else {
            return R.appFail(2000, "非法登录");
        }
        if (result.getCode() == Constants.SUCCESS_APP) {
            return R.appOk(result.getData(), "登录成功");
        }
        return result;
    }

    /**
     * 系统用户退出
     * @return
     */
    @ApiOperation("系统用户退出")
    @PostMapping("/user/logout")
    public R<?> logout() {
        loginService.mpLogout();
        return R.appOk("退出成功");
    }
}
